/**
* @author Lourdes Sanchez
* @author Eugenia Jose
* @author Esteban Castro
* @author Carlos Fernandez
* @author Fernando Turon
* @version 1.0 01-05-12
*
* La clase GestorPrueba se refiere a la capa de negocio relativa al sistema de Prueba de la aplicación
*
* @see ....
*/

package edu.uoc.tds.pec4.server.bbdd;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

import edu.uoc.tds.pec4.common.RemotoInterface;
import edu.uoc.tds.pec4.exception.PruebaNoExisteException;
import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Prueba;
import edu.uoc.tds.pec4.model.TipoEstado;
import edu.uoc.tds.pec4.model.TipoRonda;
import java.rmi.RemoteException;
import java.util.Date;

public class GestorPrueba{
    //Fernando
    //Atributo para gestionar el servicio de acceso remoto
    RemotoInterface remoto;
    String schema;

    //Fernando
    /**
     * Constructor sin parámetros de la clase GestorPrueba.
     * Crea una instancia de GestorPrueba.
     * {pre: se recibe como parametro la instancia del servidor remoto}
     * {post: asigna el servidor remoto a la instancia de GestorPrueba que se va utilizar en toda la clase}
     */
    public GestorPrueba(RemotoInterface remoto) throws RemoteException{
        this.remoto = remoto;
        this.schema = this.remoto.getSchema();
    }

    //Fernando
    /**
     * Metodo para obtener una lista de Pruebas
     * {pre: un conjunto de datos de Prueba}
     * {post: una lista correspondiente a las Pruebas
     */
    public List<Prueba> getListaPruebas() throws RemoteException{
        //Inicializamos las variables a utilizar
        List<Prueba> lista = new ArrayList<Prueba>();
	String sqlString = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//Establecemos la sentencia para obtener una lista de resultados
        sqlString = "SELECT id_prueba, "
                + "descripcion_prueba,"
                + "id_estado_prueba,"
                + "numero_plazas,"
                + "fecha_inicio_inscripcion,"
                + "fecha_fin_inscripcion "
                + "FROM "
                + this.schema + "."
                + "prueba "
                + "ORDER BY id_prueba;";

	//Capturaremos la excepcion en caso de error
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);

            resultSet = preparedStatement.executeQuery();

            //Si la consulta devuelve un dato generaremos la instancia correspondiente que devolvera el mÃ©todo
            while(resultSet.next()){
                Prueba prueba = new Prueba();

                prueba.setId_prueba(resultSet.getInt("id_prueba"));
		prueba.setDescripcion_prueba(resultSet.getString("descripcion_prueba"));
                prueba.setId_estado_prueba(resultSet.getInt("id_estado_prueba"));
                prueba.setNumero_plazas(resultSet.getInt("numero_plazas"));
                prueba.setFecha_inicio_inscripcion(resultSet.getDate("fecha_inicio_inscripcion"));
                prueba.setFecha_fin_inscripcion(resultSet.getDate("fecha_fin_inscripcion"));

                lista.add(prueba);
            }
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las estructuras abiertas
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null,  GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }

        //devolvemos la lista de pruebas generada
        return lista;
    }

    //Fernando
    /**
     * Método para obtener una lista de instancias de Prueba
     * {pre: un conjunto de instancias de la clase Prueba}
     * {post: una lista de instancias de Prueba de acuerdo a los parametros que se pasan como argumento}
     */
    public List<Prueba> getListaPruebas(Prueba prueba) throws RemoteException{
	//Establecemos la sentencia para obtener una lista de resultados
        List<Prueba> lista = new ArrayList<Prueba>();

        //Inicializamos las variables a utilizar
        String sqlString = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        //Capturaremos la excepcion en caso de error
        //En funcion de los parametros recibidos generaremos una sentencia SQL u otra para recuperar datos
        try{
            //Si no se reciben parametros
            if ((prueba.getId_prueba()==0) & (prueba.getDescripcion_prueba()==null)){
                sqlString = "SELECT * "
                        + "FROM "
                        + this.schema + "."
                        + "Prueba "
                        + "ORDER BY "
                        + "id_prueba;";

                preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            }

            //Si se reciben la descripcion como parametro
            if ((prueba.getId_prueba()==0) & (prueba.getDescripcion_prueba()!=null)){
                sqlString = "SELECT * "
                        + "FROM "
                        + this.schema + "."
                        + "Prueba "
                        + "WHERE "
                        + "descripcion_prueba = ? "
                        + "ORDER BY "
                        + "id_prueba;";

                preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
                preparedStatement.setString(1, prueba.getDescripcion_prueba());
            }

            //Si recibe el identificador de prueba como parámetro
            if ((prueba.getId_prueba()!=0) & (prueba.getDescripcion_prueba()==null)){
                sqlString = "SELECT * "
                        + "FROM "
                        + this.schema + "." +
                        "Prueba "
                        + "WHERE "
                        + "id_Prueba = ? "
                        + "ORDER BY "
                        + "id_prueba;";

                preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);                        
                preparedStatement.setInt(1, prueba.getId_prueba());
            }

            //Si se reciben como parámetro el id de prueba y la descripcion
            if ((prueba.getId_prueba()!=0) & (prueba.getDescripcion_prueba()!=null)){
                sqlString = "SELECT * "
                        + "FROM "
                        + this.schema + "."
                        + "Prueba "
                        + "WHERE "
                        + "id_Prueba = ? "
                        + "AND "
                        + "descripcion_Prueba = ? "
                        + "ORDER BY "
                        + "id_prueba;";

                preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
                preparedStatement.setInt(1, prueba.getId_prueba());
                preparedStatement.setString(1, prueba.getDescripcion_prueba());
            }

            //Se ejecuta la sentencia y se establece el resulSet correspondiente
            resultSet = preparedStatement.executeQuery();

            //Si la consulta devuelve un dato generaremos la instancia correspondiente que devolvera el mÃ©todo
            //  en otro caso recorremos el resulset y establecemos la lista con los datos que nos interesan
            while(resultSet.next()){
                Prueba pruebaEnLista = new Prueba();
                
                pruebaEnLista.setId_prueba(resultSet.getInt("id_prueba"));
		pruebaEnLista.setDescripcion_prueba(resultSet.getString("descripcion_prueba"));

                lista.add(pruebaEnLista);
            }

            //Si no existen registros en la lista se muestra un mensaje informando de ello
            if(lista.isEmpty()){
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorNoExistenRegistrosCoincidentes"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            }
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las estructuras abiertas
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null,  GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }

        //Devolvemos la lista de pruebas generada
        return lista;
    }

    /**
     * Metodo para obtener una instancia de Prueba a partir de un parámetro
     * {pre: existe un conjunto de instancias de Prueba}
     * {post: una instancia de Prueba relativa al identificador pasado por parametro}
     */
    public Prueba getPrueba(int id_prueba) throws RemoteException{
        //Instanciamos la clase prueba que devolveremos en este metodo
        Prueba prueba = new Prueba();

        //Inicializamos las variables a utilizar
	String sqlString = null;

        //Establecemos la sentencia SQL para obtener el conjunto de registros priopuesto
        sqlString = "SELECT * "
                + "FROM "
                + this.schema + "."
                + "Prueba "
                + "WHERE "
                + "id_prueba >= ? "
                + "ORDER BY "
                + "id_prueba;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        
	//Capturaremos la excepcion en caso de error
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, id_prueba);

            resultSet = preparedStatement.executeQuery();

            //Si la consulta devuelve un dato generaremos la instancia correspondiente que devolvera el mÃ©todo
            if(resultSet.next()){
                prueba.setId_prueba(resultSet.getInt("id_prueba"));
		prueba.setDescripcion_prueba(resultSet.getString("descripcion_prueba"));
                prueba.setId_estado_prueba(resultSet.getInt("id_estado_prueba"));
                prueba.setNumero_plazas(resultSet.getInt("numero_plazas"));
                prueba.setFecha_inicio_inscripcion(resultSet.getDate("fecha_inicio_inscripcion"));
                prueba.setFecha_fin_inscripcion(resultSet.getDate("fecha_fin_inscripcion"));
                prueba.setFecha_alta(resultSet.getDate("fecha_alta"));
                prueba.setFecha_baja(resultSet.getDate("fecha_baja"));
                prueba.setFecha_modificacion(resultSet.getDate("fecha_modificacion"));
                prueba.setId_responsable_alta(resultSet.getInt("id_responsable_alta"));
            }

            //Si no existen registros en la lista se muestra un mensaje informando de ello
            if(prueba==null){
                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorNoExistenRegistrosCoincidentes"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            }
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las estructuras abiertas
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }

        return prueba;
    }

    /**
     * Metodo para marcar una prueba como anulada
     * {pre: existe una prueba asociada al id_prueba recibido como parámetro}
     * {post: presenta un mensaje confirmando del éxito de la operacion}
     */
    public void anularPrueba(int id_prueba) throws RemoteException{
        //Instanciamos la clase prueba que devolveremos en este metodo
        Prueba prueba = null;
        
        try{
            prueba = this.getPrueba(id_prueba);
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        //throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));


        //Si estado de la prueba es anulado informamos de ellos
        if(prueba.getId_estado_prueba()==TipoEstado.ANULADO.valor()){
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.registroAnuladoPreviamente"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        else{
            //Inicializamos las variables a utilizar
            String sqlString = null;
            PreparedStatement preparedStatement = null;

            //Establecemos la sentencia SQL para obtener el conjunto de registros priopuesto
            sqlString = "UPDATE "
                    + this.schema + "."
                    + "Prueba "
                    + "SET "
                    + "id_estado_prueba = ?, "
                    + "fecha_baja = ? "
                    + "WHERE "
                    + "id_prueba = ?;";

            //Capturaremos la excepcion en caso de error
            try{
                preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
                preparedStatement.setInt(1, TipoEstado.ANULADO.valor());

                Date fechaBaja = new Date();
                preparedStatement.setDate(2, new java.sql.Date(fechaBaja.getTime()));
                preparedStatement.setInt(3, id_prueba);

                preparedStatement.executeUpdate();

                JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.registroEliminadoSatisfactoriamente"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.INFORMATION_MESSAGE);
            }

            /** Capturamos excepciones asociadas al acceso a la BBDD */
            catch (SQLException exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }

            /** En todo caso ejecutamos el siguiente codigo*/
            finally {
                //Cerramos las estructuras abiertas
                try {
                    preparedStatement.close();
                }

                /** Capturamos excepciones de caracter general*/
                catch (Exception exc) {
                    exc.printStackTrace();
                    //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                    throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
                }
            }
        }
    }

    //Fernando
    /**
     * Metodo para validar si los atributos de una instancia de prueba son coherentes de acuerdo a las reglas de negocio
     * {pre: una instancia de Prueba}
     * {post: un booleano indicando la idoneidad o no de la instancia recibida por parametro}
     */
    public boolean validarPrueba(Prueba prueba) throws RemoteException{
        boolean esValido = true;
        GestorParametro gestorParametro = new GestorParametro();

        //ComprobandoNoNulos
        if(prueba.getDescripcion_prueba().isEmpty()){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorDescripcionNula"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Limitando el tamaño del campo a la definicion de la BBDD
        if(prueba.getDescripcion_prueba().length()>=50){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorDescripcionMasDe50"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que se asignan plazas a la prueba
        if(prueba.getNumero_plazas() == 0){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorNumeroPlazasNulo"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que el numero de plazas no sea superior al maximo
        if(prueba.getNumero_plazas() > gestorParametro.getNumeroPersonasMaximoPorPrueba()){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorNumeroPlazasSuperiorAlMaximo"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que el numero de plazas no sea inferior al minimo
        if(prueba.getNumero_plazas() < gestorParametro.getNumeroPersonasMinimasInscritas()){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorNumeroPlazasInferiorAlMinimo"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que la fecha de inscripcion inicial tenga un valor
        if(prueba.getFecha_inicio_inscripcion()==null){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorFechaInicioInscripcionIncorrecta"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que la fecha de inscripcion inicial sea posterior a la fecha de alta
        if(prueba.getFecha_inicio_inscripcion().compareTo(prueba.getFecha_alta())<0){
            System.out.println(prueba.getFecha_inicio_inscripcion().toString());
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorFechaInicioInscripcionAnteriorFechaAlta"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que la fecha de inscripcion final tenga un valor
        if(prueba.getFecha_fin_inscripcion()==null){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorFechaFinInscripcionIncorrecta"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que la fecha de inscripcion final tenga posterior a la fecha final
        if(prueba.getFecha_inicio_inscripcion().compareTo(prueba.getFecha_fin_inscripcion())>0){
            esValido = false;
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorFechaInicioInscripcionPosteriorFechaFinInscripcion"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Verificando que la fecha de Fin de Inscripción la Prueba sea anterior a la fecha de Inicio de la Realizacion de la Ronda
        Date fechaFinInscripcionPrueba;
        Date fechaInicioRealizacionRonda;

        fechaFinInscripcionPrueba = prueba.getFecha_fin_inscripcion();

        try{
            if(this.remoto.existeRonda(prueba, TipoRonda.CLASIFICATORIA)){
                fechaInicioRealizacionRonda = this.remoto.getFechaInicioRealizacionRonda(prueba, TipoRonda.ELIMINATORIA);

                if(fechaInicioRealizacionRonda.compareTo(fechaFinInscripcionPrueba) < 0){
                    esValido = false;
                    JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorFechaInicioInscripcionRondaPosteriorFechaFinInscripcion"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                }
            }

            if(this.remoto.existeRonda(prueba, TipoRonda.ELIMINATORIA)){
                fechaInicioRealizacionRonda = this.remoto.getFechaInicioRealizacionRonda(prueba, TipoRonda.ELIMINATORIA);

                if(fechaInicioRealizacionRonda.compareTo(fechaFinInscripcionPrueba) < 0){
                    esValido = false;
                    JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorFechaInicioInscripcionRondaPosteriorFechaFinInscripcion"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                }
            }
        }

        catch(Exception exc){
            esValido=false;
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errornosepuedevalidar"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errornosepuedevalidar"));
        }
        
        
        //Retorno si esta validado        
        finally{
            return esValido;
        }
    }

    //Fernando
    /**
     * Metodo para establecer la persistencia de una instancia de Prueba recibida como parámetro si los atributos de una instancia de prueba son coherentes de acuerdo a las reglas de negocio
     * {pre: una instancia de Prueba}
     * {post: un entero que indica el valor de la secuencia generada en la insercion en la BBDD,
     *          en nuestro caso el id de prueba}
     */
    public int insertarPrueba(Prueba prueba) throws RemoteException{
        //Inicializamos las variables a utilizar
        int registroInsertado = 0;        
	String sqlString = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//Establecemos la sentencia para obtener una lista de resultados
        sqlString = "INSERT INTO "
                + this.schema + "."
                + "Prueba "
                + "(id_responsable_alta"
                + ",descripcion_prueba"
                + ",numero_plazas"
                + ",id_estado_prueba"
                + ",fecha_inicio_inscripcion"
                + ",fecha_fin_inscripcion"
                + ",fecha_alta)"
                + " VALUES(?,?,?,?,?,?,?)"
                + " RETURNING Prueba.*;";

	//**Capturaremos la excepcion en caso de error */
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, prueba.getId_responsable_alta());
            preparedStatement.setString(2, prueba.getDescripcion_prueba());
            preparedStatement.setInt(3, prueba.getNumero_plazas());
            preparedStatement.setInt(4, prueba.getId_estado_prueba());
            preparedStatement.setDate(5, new java.sql.Date(prueba.getFecha_inicio_inscripcion().getTime()));
            preparedStatement.setDate(6, new java.sql.Date(prueba.getFecha_fin_inscripcion().getTime()));
            preparedStatement.setDate(7, new java.sql.Date(prueba.getFecha_alta().getTime()));

            resultSet =  preparedStatement.executeQuery();
            resultSet.next();

            //Obtenemos el id_prueba generado por la secuencia establecida en el motor de BBDD
            registroInsertado = resultSet.getInt(1);
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las estructuras abiertas
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }
        
        return registroInsertado;
    }

    //Fernando
    /**
     * Metodo para actualizar el estado de una Prueba
     * {pre: una instancia de Prueba}
     * {post: ese método no devuelve ningún valor}
     */
    public void actualizarPrueba(Prueba prueba, TipoEstado tipoEstado) throws RemoteException{
        //Inicializamos las variables a utilizar
	String sqlString = null;
        PreparedStatement preparedStatement = null;

	//Establecemos la sentencia a actualizar
	sqlString = "UPDATE "
                + this.schema + "."
                + "Prueba "
                + "SET "
                + "id_estado_prueba = ? "
                + "WHERE "
                + "id_prueba = ?;";

	//**Capturaremos la excepcion en caso de error */
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, tipoEstado.valor());
            preparedStatement.setInt(2, prueba.getId_prueba());

            preparedStatement.executeUpdate();
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las estructuras abiertas
            try {
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }
    }

    //Fernando
    /**
     * Metodo para obtener una lista de Pruebas cuyo estado se pasa por parámetro
     * {pre: un conjunto de datos de Prueba}
     * {post: una lista correspondiente a las Pruebas que estan en estado pasado por parámetro}
     */
    public List<Prueba> getListaPruebasPorEstado(TipoEstado tipoEstado) throws RemoteException{
        //Inicializamos las variables a utilizar
        List<Prueba> lista = new ArrayList<Prueba>();
	String sqlString = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//Establecemos la sentencia para obtener una lista de resultados
        sqlString = "SELECT id_prueba, "
                + "descripcion_prueba,"
                + "id_estado_prueba,"
                + "numero_plazas,"
                + "fecha_inicio_inscripcion,"
                + "fecha_fin_inscripcion "
                + "FROM "
                + this.schema + "."
                + "prueba "
                + "WHERE "
                + "id_estado_prueba = ?"
                + "ORDER BY id_prueba;";

	//Capturaremos la excepcion en caso de error
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, tipoEstado.valor());

            resultSet = preparedStatement.executeQuery();

            //Si la consulta devuelve un dato generaremos la instancia correspondiente que devolvera el mÃ©todo
            while(resultSet.next()){
                Prueba prueba = new Prueba();

                prueba.setId_prueba(resultSet.getInt("id_prueba"));
		prueba.setDescripcion_prueba(resultSet.getString("descripcion_prueba"));
                prueba.setId_estado_prueba(resultSet.getInt("id_estado_prueba"));
                prueba.setNumero_plazas(resultSet.getInt("numero_plazas"));
                prueba.setFecha_inicio_inscripcion(resultSet.getDate("fecha_inicio_inscripcion"));
                prueba.setFecha_fin_inscripcion(resultSet.getDate("fecha_fin_inscripcion"));

                lista.add(prueba);
            }
        }

        /** Capturamos excepciones asociadas al acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));

        }

        /** Capturamos excepciones de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            //Cerramos las estructuras abiertas
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciones de caracter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }

        //devolvemos la lista de pruebas generada
        return lista;
    }

    //Fernando
    /**
     * Metodo para obtener la fecha de Inicio de Inscripcion de una Prueba pasada por parámetro
     * {pre: un conjunto de datos de Prueba}
     * {post: un valor de tipo fecha correspondiente la la fecha de inicio de inscripcion de lap rueba pasada por parámetro}
     */
    public Date getFechaInicioInscripcionPrueba(Prueba prueba) throws RemoteException{
        Date fechaInicioInscripcionPrueba = null;

        //**Establecemos la sentencia para obtener la fecha de inicio de inscripción*/
	String sqlString = null;
	sqlString = "SELECT "
                + "fecha_inicio_inscripcion "
                + "FROM "
                + this.schema + "."
                + "Prueba "
                + "WHERE "
                + "id_prueba = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, prueba.getId_prueba());
            resultSet = preparedStatement.executeQuery();

            //**Si no hay registro lanzamos nuestra excepcion*/
            if(!resultSet.next())
                throw new PruebaNoExisteException();

            fechaInicioInscripcionPrueba = resultSet.getDate("fecha_inicio_inscripcion");
        }

        /** Capturamos el error en el caso en que no haya una obtenido ningun registro la consulta */
        catch(PruebaNoExisteException exc){
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.listaVacia.text"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("error.listaVacia.text"));
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciÃ³n de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente código*/
        finally {
            try {
                resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciÃ³n de carÃ¡cter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorTitulo"));
            }
        }

        return fechaInicioInscripcionPrueba;
    }

    //Fernando
    /**
     * Metodo para obtener la fecha de Fin de Inscripcion de una Prueba pasada por parámetro
     * {pre: un conjunto de datos de Prueba}
     * {post: un valor de tipo fecha correspondiente la la fecha de fin de inscripcion de lap rueba pasada por parámetro}
     */
    public Date getFechaFinInscripionPrueba(Prueba prueba) throws RemoteException{
        Date fechaFinInscripcionPrueba = null;

        //**Establecemos la sentencia para obtener la fecha de inicio de inscripción*/
	String sqlString = null;
	sqlString = "SELECT "
                + "fecha_fin_inscripcion "
                + "FROM "
                + this.schema + "."
                + "Prueba "
                + "WHERE "
                + "id_prueba = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, prueba.getId_prueba());
            resultSet = preparedStatement.executeQuery();

            //**Si la consulta no devuelve ningín registro lanzaremos nuestra excepcion */
            if(!resultSet.next())
                throw new PruebaNoExisteException();

            fechaFinInscripcionPrueba = resultSet.getDate("fecha_fin_inscripcion");
        }

        /** Capturamos el error en el caso en que la lista generada este vacia */
        catch(PruebaNoExisteException exc){
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorPruebaNoExiste"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorPruebaNoExiste"));
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciÃ³n de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            try {
                resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciÃ³n de carÃ¡cter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }

        //**Retorna el valor calculado */
        return fechaFinInscripcionPrueba;
    }

    //Fernando
    /**
     * Metodo para obtener la fecha de Fin de Inscripcion de una Prueba pasada por parámetro
     * {pre: un conjunto de datos de Prueba}
     * {post: un valor de tipo fecha correspondiente la la fecha de fin de inscripcion de lap rueba pasada por parámetro}
     */
    public String getDescripcionPrueba(Prueba prueba) throws RemoteException{
        String descripcionPrueba = null;

        //**Establecemos la sentencia para obtener la fecha de inicio de inscripción*/
	String sqlString = null;
	sqlString = "SELECT "
                + "descripcion_prueba "
                + "FROM "
                + this.schema + "."
                + "Prueba "
                + "WHERE "
                + "id_prueba = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//**Capturaremos la excepcion en caso de error*/
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, prueba.getId_prueba());
            resultSet = preparedStatement.executeQuery();

            //**Si la consulta no devuelve ningín registro lanzaremos nuestra excepcion */
            if(!resultSet.next())
                throw new PruebaNoExisteException();

            descripcionPrueba = resultSet.getString("descripcion_prueba");
        }

        /** Capturamos el error en el caso en que la lista generada este vacia */
        catch(PruebaNoExisteException exc){
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorPruebaNoExiste"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorPruebaNoExiste"));
        }

        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.errorBBDD"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.errorBBDD"));
        }

        /** Capturamos excepciÃ³n de caracter general*/
        catch (Exception exc) {
            exc.printStackTrace();
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
        }

        /** En todo caso ejecutamos el siguiente codigo*/
        finally {
            try {
                resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciÃ³n de carÃ¡cter general*/
            catch (Exception exc) {
                exc.printStackTrace();
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("gestorprueba.error"), GestorIdiomas.getMessage("gestorprueba.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                throw new RemoteException(GestorIdiomas.getMessage("gestorprueba.error"));
            }
        }

        //**Retorna el valor calculado */
        return descripcionPrueba;
    }

    //Fernando
    /**
     * Metodo para indicar si hay Ronda CLasificatoria para un nçumero dadod e de alumnos inscritos
     * {pre: un conjunto de datos de Prueba}
     * {post: un valor de tipo logico que indica si se tiene el número minimo de inscritos o no
     */
    public boolean hayRondaClasificatoria(int numeroInscritos){
        boolean hayRondaClasificatoria = true;
        int numeroMinimoInscritosEnPrueba = 0;
        int numeroMaximoEnFinal = 0;

        //**Obtenemos los datos de parñametros para la realziacion dela comparacion*/
        GestorParametro gestorParametro = new GestorParametro();
        numeroMinimoInscritosEnPrueba = gestorParametro.getNumeroPersonasMinimasInscritas();
        numeroMaximoEnFinal = gestorParametro.getNumeroPersonasMaximoEnFinal();

        //**Si el numero de inscritos es inferior al minimo exigido devuelve falso*/
        if(numeroInscritos < numeroMinimoInscritosEnPrueba){
            hayRondaClasificatoria = false;
        }

        //**Si el numero de inscritos es inferior al maximo para una ronda NO hay clasificatoria */
        if(numeroInscritos < numeroMaximoEnFinal){
            hayRondaClasificatoria = false;
        }

        //* retorna el valor calculado */
        return hayRondaClasificatoria;
    }

    //Fernando
    /**
     * Metodo para indicar si hay Ronda Eliminatoria para un numero dado de de estudiantes inscritos
     * {pre: un conjunto de datos de Prueba}
     * {post: un valor de tipo logico que indica si se tiene el número minimo de inscritos o no
     */
    public boolean hayRondaEliminatoria(int numeroInscritos){
        boolean hayRondaEliminatoria = true;
        int numeroMinimoInscritosEnPrueba = 0;
        int numeroMaximoEnFinal = 0;

        //**Obtenemos los datos de parñametros para la realziacion dela comparacion*/
        GestorParametro gestorParametro = new GestorParametro();
        numeroMinimoInscritosEnPrueba = gestorParametro.getNumeroPersonasMinimasInscritas();
        numeroMaximoEnFinal = gestorParametro.getNumeroPersonasMaximoEnFinal();

        //**Si el numero de inscritos es inferior al minimo exigido devuelve falso*/
        if(numeroInscritos < numeroMinimoInscritosEnPrueba){
            hayRondaEliminatoria = false;
        }

        //**Si el numero de inscritos es inferior al maximo para una ronda NO hay clasificatoria */
        if(numeroInscritos > numeroMaximoEnFinal){
            hayRondaEliminatoria = false;
        }

        //* retorna el valor calculado */
        return hayRondaEliminatoria;
    }

    //Fernando
    //Metodo que obtiene la descripcion asociada a un tipo enumerado cuya posicion en la lista se pasa por parametro
    public String getDescripcionEstadoPrueba(int id_tipo_estado){
        TipoEstado tipoEstado[] = TipoEstado.values();
        //para hacer coincidir la posicion del array con el indice recibido
        return tipoEstado[id_tipo_estado].toString();
    }
    
     //EJF
    public List<Prueba> getListaPruebasEstudiante(int id_usuario) throws RemoteException{
        
        List<Prueba> listaPruebas = new ArrayList<Prueba>();
        String sqlString = "SELECT p.* " 
                            + " FROM " + this.remoto.getSchema() + ".inscripcion i," 
                            + this.remoto.getSchema() + ".prueba p "
                            + " WHERE i.id_usuario = ? "
                            + " AND i.fecha_baja IS NULL " 
                            + " AND i.id_prueba = p.id_prueba "
                            + " AND p.fecha_baja IS NULL "
                            + " AND p.id_estado_prueba not in (1,5,6);";
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        
        try {
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, id_usuario);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                listaPruebas.add(getPruebaFromResultSet(resultSet));  
            }
        }
        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            throw new RemoteException(GestorIdiomas.getMessage("error.gestorbbdd.bbdd"));
        }
        /** Capturamos excepción de carácter general*/
        catch (Exception exc) {
            throw new RemoteException(GestorIdiomas.getMessage("error.general"));
        }
        /** En todo caso ejecutamos el siguiente código*/
        finally {
            try {
		resultSet.close();
                preparedStatement.close();
            }
            /** Capturamos excepción de carácter general*/
            catch (Exception exc) {
                //Excepción inesperada
                throw new RemoteException(GestorIdiomas.getMessage("error.general"));
            }
        }

        return listaPruebas;
    }
    
    private Prueba getPruebaFromResultSet(ResultSet resultSet) throws SQLException{
        Prueba prueba = new Prueba();
        prueba.setId_prueba(resultSet.getInt("id_prueba"));
        prueba.setDescripcion_prueba(resultSet.getString("descripcion_prueba"));
        prueba.setId_estado_prueba(resultSet.getInt("id_estado_prueba"));
//        prueba.setNumero_plazas(resultSet.getInt("numero_plazas"));
//        prueba.setFecha_inicio_inscripcion(resultSet.getDate("fecha_inicio_inscripcion"));
//        prueba.setFecha_fin_inscripcion(resultSet.getDate("fecha_fin_inscripcion"));
//        prueba.setFecha_alta(resultSet.getDate("fecha_alta"));
//        prueba.setFecha_baja(resultSet.getDate("fecha_baja"));
//        prueba.setFecha_modificacion(resultSet.getDate("fecha_modificacion"));
//        prueba.setId_responsable_alta(resultSet.getInt("id_responsable_alta"));
        return prueba;
    }
}
